<?php
include_once ("includes/diccionario.class.php");
include_once ("includes/latex.class.php");
include_once ("includes/latexCompleto.class.php");

class Acciones {

	public function __construct() {
	}

	public function detalle_registro($parametros, $plantilla = 'plantillas/detalleRegistro.php') {
		$diccionario = new Diccionario(Array (
			'identificador' => $parametros['detalle_registro']
		));
		$datos = $diccionario->detalleRegistro();
		//HACEMOS QUE EL ARRAY SEA SOLO UN ARRAU ASOCIATIVO
		$datos = array_pop($datos);
		if (!count($datos))
			$msgProceso = "No se encontr&oacute; el registro";

		return Array (
			'msgProceso' => $msgProceso,
			'plantilla' => $plantilla,
			'datos' => $datos
		);

	}

	public function generar_latex($id) {
		$diccionario = new Diccionario(Array (
			'identificador' => $id
		));
		$dic = $diccionario->detalleRegistro();
		$dic = array_pop($dic);
		$latex = new Latex();
		$latex->extraerLatex();
		$latex->llenarLatex($dic);
		$nombreArchivo = $this->quitarAcentos($dic['nombre']);
		$this->generarArchivoLatex($latex, $nombreArchivo);
		return Array (
			'nombreArchivo' => $nombreArchivo
		);
	}

	public function generarDiccionarioLatex() {
		$latex = new LatexCompleto();
		$latex->extraerLatex();
		$this->generarArchivoLatexCompleto($latex);
	}

	public function generar_pdf($nombreArchivo) {
		exec('latex  /var/www/proyectoParamoAndino/datos/temporal/' . $nombreArchivo . '/' . $nombreArchivo . '.tex');
		exec('dvips ' . $nombreArchivo . '.dvi -o ' . $nombreArchivo . '.ps');
		exec('ps2pdf ' . $nombreArchivo . '.ps');
		exec('cp ' . $nombreArchivo . '.pdf' . ' /var/www/proyectoParamoAndino/datos/temporal/' . $nombreArchivo);
		exec('rm ' . $nombreArchivo . '*');
	}

	public function quitarAcentos($text) {
		$text = htmlentities($text, ENT_QUOTES, 'UTF-8');
		$text = strtolower($text);
		$patron = array (
			'/[\., ]+/' => '-',
			'/&agrave;/' => 'a',
			'/&egrave;/' => 'e',
			'/&igrave;/' => 'i',
			'/&ograve;/' => 'o',
			'/&ugrave;/' => 'u',
			'/&aacute;/' => 'a',
			'/&eacute;/' => 'e',
			'/&iacute;/' => 'i',
			'/&oacute;/' => 'o',
			'/&uacute;/' => 'u',
			'/&acirc;/' => 'a',
			'/&ecirc;/' => 'e',
			'/&icirc;/' => 'i',
			'/&ocirc;/' => 'o',
			'/&ucirc;/' => 'u',
			'/&atilde;/' => 'a',
			'/&etilde;/' => 'e',
			'/&itilde;/' => 'i',
			'/&otilde;/' => 'o',
			'/&utilde;/' => 'u',
			'/&auml;/' => 'a',
			'/&euml;/' => 'e',
			'/&iuml;/' => 'i',
			'/&ouml;/' => 'o',
			'/&uuml;/' => 'u',
			'/&auml;/' => 'a',
			'/&euml;/' => 'e',
			'/&iuml;/' => 'i',
			'/&ouml;/' => 'o',
			'/&uuml;/' => 'u',
			'/&aring;/' => 'a',
			'/&ntilde;/' => 'n',

			
		);

		$text = preg_replace(array_keys($patron), array_values($patron), $text);
		return $text;
	}
	
	public function generarPdfCompleto() {
		exec("latex /var/www/proyectoParamoAndino/datos/temporal/Diccionario/diccionario.tex");
		exec("latex /var/www/proyectoParamoAndino/datos/temporal/Diccionario/diccionario.tex");
		exec('dvips diccionario.dvi -o diccionario.ps');
		exec('ps2pdf diccionario.ps');
		exec('cp diccionario.pdf /var/www/proyectoParamoAndino/datos/temporal/Diccionario/');
		exec('rm diccionario.*');
	}

	public function toISO($cadena) {
		//convierte de UTF-8 a ISO-8859-1 
		$cadena = mb_convert_encoding($cadena, "ISO-8859-1", "UTF-8");
		return $cadena;
	}

	public function generarArchivoLatex($latex, $nombreArchivo) {
		$tabla = $latex->getTabla();
		exec('mkdir /var/www/proyectoParamoAndino/datos/temporal/' . $nombreArchivo);
		exec('chmod 777 -R /var/www/proyectoParamoAndino/datos/temporal/' . $nombreArchivo);
		$archivo = fopen("datos/temporal/" . $nombreArchivo . "/" . $nombreArchivo . ".tex", 'w+');
		chmod($archivo, 0777);
		fwrite($archivo, $this->toISO($latex->getDocumentclass()));
		fwrite($archivo, $this->toISO($latex->getUsepackage()));
		fwrite($archivo, $this->toISO($latex->getConfiguracion()));
		$documento = $latex->getDocumento();
		fwrite($archivo, $this->toISO($documento['inicio']));
		fwrite($archivo, $this->toISO($tabla['iniciotabla']));
		$fila = Array (
			"filanombre",
			"filaambito",
			"filadefinicion",
			"filaacepcionvenezuela",
			"filaejemplovenezuela",
			"filafuentevenezuela",
			"filaacepcioncolombia",
			"filaejemplocolombia",
			"filafuentecolombia",
			"filaacepcionecuador",
			"filaejemploecuador",
			"filafuenteecuador",
			"filaacepcionperu",
			"filaejemploperu",
			"filafuenteperu"
		);
		$multicolum = Array (
			"multicolumn",
			"texto",
			"finfila"
		);
		$sinmulticolum = Array (
			"pais",
			"divcolum",
			"texto",
			"finfila"
		);
		
		foreach ($fila as $valor) {
			if ("filaacepcion" == substr($valor, 0, 12)) {
				foreach ($sinmulticolum as $valor2) {
					fwrite($archivo, $this->toISO($tabla[$valor][$valor2]));
				}
			} else {
				foreach ($multicolum as $valor2) {
					fwrite($archivo, $this->toISO($tabla[$valor][$valor2]));
				}
			}
		}
		fwrite($archivo, $this->toISO($tabla['fintabla']));
		fwrite($archivo, $this->toISO($documento['fin']));
		fclose($archivo);
	}

	public function generarArchivoLatexCompleto($latex) {
		
		$archivo = fopen("datos/temporal/Diccionario/diccionario.tex", 'w+');
		chmod($archivo, 0777);
		
		fwrite($archivo, $this->toISO($latex->getDocumentclass()));
		fwrite($archivo, $this->toISO($latex->getUsepackage()));
		fwrite($archivo, $this->toISO($latex->getConfiguracion()));
		$documento = $latex->getDocumento();
		fwrite($archivo, $this->toISO($documento['inicio']));
		fwrite($archivo, $this->toISO($documento['portada']));
		fwrite($archivo, $this->toISO($documento['indice']));
		$tablas = $latex->getTablas();
		foreach ( $tablas as $tabla ) {
			fwrite($archivo, $this->toISO($tabla['iniciotabla']));
			$fila = Array (
				"filanombre",
				"filaambito",
				"filadefinicion",
				"filaacepcionvenezuela",
				"filaejemplovenezuela",
				"filafuentevenezuela",
				"filaacepcioncolombia",
				"filaejemplocolombia",
				"filafuentecolombia",
				"filaacepcionecuador",
				"filaejemploecuador",
				"filafuenteecuador",
				"filaacepcionperu",
				"filaejemploperu",
				"filafuenteperu"
			);
			$multicolum = Array (
				"multicolumn",
				"texto",
				"finfila"
			);
			$sinmulticolum = Array (
				"pais",
				"divcolum",
				"texto",
				"finfila"
			);
			$captacion =Array (
				"comando",
				"nombre"
			);
			
			foreach ($fila as $valor) {
				if ("filaacepcion" == substr($valor, 0, 12)) {
					foreach ($sinmulticolum as $valor2) {
						fwrite($archivo, $this->toISO($tabla[$valor][$valor2]));
					}
				} else {
					foreach ($multicolum as $valor2) {
						fwrite($archivo, $this->toISO($tabla[$valor][$valor2]));
					}
				}
			}
			fwrite($archivo, $this->toISO($tabla['captacion']['comando']));
			fwrite($archivo, $this->toISO($tabla['captacion']['nombre']));
			fwrite($archivo, $this->toISO($tabla['fintabla']));
		}
		fwrite($archivo, $this->toISO($documento['fin']));
		fclose($archivo);
	}

	public function buscar_datos($parametros, $plantilla = 'plantillas/listarRegistro.php') {
		$msgProceso = "Lista de Terminos";
		#VERIFICAMOS QUE CAMPOS TIENEN DATOS
		$datos = array ();

		$datos['nombre'] = (!empty ($parametros['nombre'])) ? $parametros['nombre'] : null;
		$datos['ambito'] = (!empty ($parametros['ambito'])) ? $parametros['ambito'] : null;
		$datos['acepcion'][$parametros['pais']] = (!empty ($parametros['pais'])) ? $parametros['nombre'] : null;

		$diccionario = new Diccionario($datos);
		$datos = $diccionario->listarRegistro();
		if (!count($datos))
			$msgProceso = 'No se encontraron registros';

		return Array (
			'msgProceso' => $msgProceso,
			'plantilla' => $plantilla,
			'datos' => $datos
		);
	}

	public function validarDatosTermino($parametros, $confErrorFormulario) {
		$errores = null;

		//LIMPIAMOS LOS ESPACIOS EN BALNCO
		if (!isset ($parametros['nombre']) || $parametros['nombre'] == "")
			$errores['nombre'] = $confErrorFormulario;

		if (!isset ($parametros['ambito']) || count($parametros['ambito']) == 0)
			$errores['ambito'] = $confErrorFormulario;

		if (!isset ($parametros['categoria']) || $parametros['categoria'] == "")
			$errores['categoria'] = $confErrorFormulario;

		if (!isset ($parametros['definicion']) || $parametros['definicion'] == "")
			$errores['definicion'] = $confErrorFormulario;

		return $errores;
	}

	public function formatearDatosTermino($parametros, $confAmbito) {
		$registro['identificador'] = trim($parametros['identificador']);
		$registro['nombre'] = trim($parametros['nombre']);
		$registro['categoria'] = $parametros['categoria'];
		# HACEMOS QUE ambito SEA UN ARRAY
		if (is_array($parametros['ambito']) && count($parametros['ambito'])) {
			foreach ($parametros['ambito'] AS $clave) {
				$datos["$clave"] = $confAmbito["$clave"];
			}
			$registro['ambito'] = $datos;
		}

		$registro['definicion'] = trim($parametros['definicion']);

		#CAMPOS VALIDOS PARA EL FORMULARIO
		# ESTO ES UN ERROR PERO PARA NO CORREGIR DE 0 DECIDÍ HACERLO ASI

		$registro['venezuela']['acepcion'] = trim($parametros['acepcion_venezuela']);
		$registro['venezuela']['ejemplo'] = trim($parametros['ejemplo_venezuela']);
		$registro['venezuela']['fuente'] = trim($parametros['fuente_venezuela']);

		$registro['colombia']['acepcion'] = trim($parametros['acepcion_colombia']);
		$registro['colombia']['ejemplo'] = trim($parametros['ejemplo_colombia']);
		$registro['colombia']['fuente'] = trim($parametros['fuente_colombia']);

		$registro['peru']['acepcion'] = trim($parametros['acepcion_peru']);
		$registro['peru']['ejemplo'] = trim($parametros['ejemplo_peru']);
		$registro['peru']['fuente'] = trim($parametros['fuente_peru']);

		$registro['ecuador']['acepcion'] = trim($parametros['acepcion_ecuador']);
		$registro['ecuador']['ejemplo'] = trim($parametros['ejemplo_ecuador']);
		$registro['ecuador']['fuente'] = trim($parametros['fuente_ecuador']);

		# CAMPOS VALIDOS PARA EL XML .
		# ESTO ES UN ERRO PERO PARA NO CORREGIR DE 0 DECIDÍ HACERLO ASI

		$registro['acepcion']['venezuela'] = trim($parametros['acepcion_venezuela']);
		$registro['acepcion']['colombia'] = trim($parametros['acepcion_colombia']);
		$registro['acepcion']['peru'] = trim($parametros['acepcion_peru']);
		$registro['acepcion']['ecuador'] = trim($parametros['acepcion_ecuador']);

		$registro['ejemplo']['venezuela'] = trim($parametros['ejemplo_venezuela']);
		$registro['ejemplo']['colombia'] = trim($parametros['ejemplo_colombia']);
		$registro['ejemplo']['peru'] = trim($parametros['ejemplo_peru']);
		$registro['ejemplo']['ecuador'] = trim($parametros['ejemplo_ecuador']);

		$registro['fuente']['venezuela'] = trim($parametros['fuente_venezuela']);
		$registro['fuente']['colombia'] = trim($parametros['fuente_colombia']);
		$registro['fuente']['peru'] = trim($parametros['fuente_peru']);
		$registro['fuente']['ecuador'] = trim($parametros['fuente_ecuador']);

		return $registro;
	}

	private function formatearDatosLotes($parametros, $confAmbito) {
		$registro['identificador'] = trim($parametros['identificador']);
		$registro['nombre'] = trim($parametros['nombre']);
		$registro['categoria'] = $parametros['categoria'];
		# HACEMOS QUE ambito SEA UN ARRAY
		if (is_array($parametros['ambito']) && count($parametros['ambito'])) {
			foreach ($parametros['ambito'] AS $valor) {
				foreach ($confAmbito as $clave => $value) {
					if ($value == trim($valor)) {
						$clave_2 = $clave;
					}
				}
				$datos["$clave_2"] = $valor;
			}
			$registro['ambito'] = $datos;
		}

		$registro['definicion'] = trim($parametros['definicion']);

		#CAMPOS VALIDOS PARA EL FORMULARIO
		# ESTO ES UN ERROR PERO PARA NO CORREGIR DE 0 DECIDÍ HACERLO ASI

		$registro['venezuela']['acepcion'] = trim($parametros['acepcion_venezuela']);
		$registro['venezuela']['ejemplo'] = trim($parametros['ejemplo_venezuela']);
		$registro['venezuela']['fuente'] = trim($parametros['fuente_venezuela']);

		$registro['colombia']['acepcion'] = trim($parametros['acepcion_colombia']);
		$registro['colombia']['ejemplo'] = trim($parametros['ejemplo_colombia']);
		$registro['colombia']['fuente'] = trim($parametros['fuente_colombia']);

		$registro['peru']['acepcion'] = trim($parametros['acepcion_peru']);
		$registro['peru']['ejemplo'] = trim($parametros['ejemplo_peru']);
		$registro['peru']['fuente'] = trim($parametros['fuente_peru']);

		$registro['ecuador']['acepcion'] = trim($parametros['acepcion_ecuador']);
		$registro['ecuador']['ejemplo'] = trim($parametros['ejemplo_ecuador']);
		$registro['ecuador']['fuente'] = trim($parametros['fuente_ecuador']);

		# CAMPOS VALIDOS PARA EL XML .
		# ESTO ES UN ERRO PERO PARA NO CORREGIR DE 0 DECIDÍ HACERLO ASI

		$registro['acepcion']['venezuela'] = trim($parametros['acepcion_venezuela']);
		$registro['acepcion']['colombia'] = trim($parametros['acepcion_colombia']);
		$registro['acepcion']['peru'] = trim($parametros['acepcion_peru']);
		$registro['acepcion']['ecuador'] = trim($parametros['acepcion_ecuador']);

		$registro['ejemplo']['venezuela'] = trim($parametros['ejemplo_venezuela']);
		$registro['ejemplo']['colombia'] = trim($parametros['ejemplo_colombia']);
		$registro['ejemplo']['peru'] = trim($parametros['ejemplo_peru']);
		$registro['ejemplo']['ecuador'] = trim($parametros['ejemplo_ecuador']);

		$registro['fuente']['venezuela'] = trim($parametros['fuente_venezuela']);
		$registro['fuente']['colombia'] = trim($parametros['fuente_colombia']);
		$registro['fuente']['peru'] = trim($parametros['fuente_peru']);
		$registro['fuente']['ecuador'] = trim($parametros['fuente_ecuador']);

		return $registro;
	}

	public function ingresar_datos($parametros) {
		$msgProceso = "Lista de Terminos";
		#VERIFICAMOS QUE CAMPOS TIENEN DATOS
		$datos = array ();

		$datos['nombre'] = (!empty ($parametros['nombre'])) ? $parametros['nombre'] : null;
		$datos['ambito'] = (!empty ($parametros['ambito'])) ? $parametros['ambito'] : null;
		$datos['categoria'] = (!empty ($parametros['categoria'])) ? $parametros['categoria'] : null;
		$datos['acepcion'][$parametros['pais']] = (!empty ($parametros['pais'])) ? $parametros['nombre'] : null;

		//      $diccionario = new Diccionario($datos);
		//      $datos = $diccionario->listarRegistro(); hacia metodo ingresar de $diccionario
		//      if(!count($datos))
		//        $msgProceso = 'No se encontraron registros';
		//      
		return Array (
			'msgProceso' => $msgProceso,
			'plantilla' => 'plantillas/listarRegistro.php',
			'datos' => $datos
		);
	}

	public function ingresar_lotes($rutaArchivo, $confAmbito){
		$inp = fopen($rutaArchivo, 'r');
		if (!$inp) {
			echo "error abriendo archivo de entrada";
		}

		$error = 0;
		$termino = array ();
		$TERMINOS = array ();

		while (!feof($inp) && $error != 1) {
			//echo "while";
			$line = fgets($inp);

			if ($line[0] == '$' || empty ($line)) {
				$error = 2;
				echo "error 2 nombre; ";
			} else
				$termino['nombre'] = $line;

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error categoria";
			}
			if ($line[0] == '$') {
				$termino['categoria'] = '';
			} else {
				$termino['categoria'] = $line;
			}

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error def";
			}

			if ($line[0] == '$') {
				$termino['definicion'] = '';
			} else {
				$termino['definicion'] = $line;
			}

			$line = fgets($inp);
			if ($line[0] == '$' || empty ($line)) {
				$error = 2; //echo "error 2 acep ve; ";
			}

			//if ($line[0]=='$') { $termino['acepcion_venezuela']='';}

			else {
				$nombres = explode(',', $line);
				foreach ($nombres as $nom) {
					$termino['acepcion_venezuela'] = $nom;
				}
			}

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "ej ve";
			} else
				if ($line[0] == '$') {
					$termino['ejemplo_venezuela'] = '';
				} else
					$termino['ejemplo_venezuela'] = $line;

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error f ve";
			} else
				if ($line[0] == '$') {
					$termino['fuente_venezuela'] = '';
				} else
					$termino['fuente_venezuela'] = $line;

			/**************************************************/

			$line = fgets($inp);
			if ($line[0] == '$' || empty ($line)) {
				$error = 2; //echo "error 2 acep co; ";
			}
			//if ($line[0]=='$') { $termino['acepcion_colombia']='';}

			else {
				$nombres = explode(',', $line);
				foreach ($nombres as $nom) {
					$termino['acepcion_colombia'] = $nom;
				}
			}

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error ej co";
			} else
				if ($line[0] == '$') {
					$termino['ejemplo_colombia'] = '';
				} else
					$termino['ejemplo_colombia'] = $line;

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error f co";
			} else
				if ($line[0] == '$') {
					$termino['fuente_colombia'] = '';
				} else
					$termino['fuente_colombia'] = $line;
			/*************************************************************/

			$line = fgets($inp);
			if ($line[0] == '$' || empty ($line)) {
				$error = 2; //echo "error 2 acep ec; ";
			}
			//if ($line[0]=='$') { $termino['acepcion_ecuador']='';}

			else {
				$nombres = explode(',', $line);
				foreach ($nombres as $nom) {
					$termino['acepcion_ecuador'] = $nom;
				}
			}

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error ej ec";
			} else
				if ($line[0] == '$') {
					$termino['ejemplo_ecuador'] = '';
				} else
					$termino['ejemplo_ecuador'] = $line;

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error f ec";
			} else
				if ($line[0] == '$') {
					$termino['fuente_ecuador'] = '';
				} else
					$termino['fuente_ecuador'] = $line;

			/*************************************************************/

			$line = fgets($inp);
			if (empty ($line) || $line[0] == '$') {
				$error = 2; //echo "error 2 acep pe; ";
			}
			//if ($line[0]=='$' || $line[0]=='$') { $termino['acepcion_peru']='';}

			else {
				$nombres = explode(',', $line);
				foreach ($nombres as $nom) {
					$termino['acepcion_peru'] = $nom;
				}
			}

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error ej pe";
			} else
				if ($line[0] == '$') {
					$termino['ejemplo_peru'] = '';
				} else
					$termino['ejemplo_peru'] = $line;

			$line = fgets($inp);
			if (empty ($line)) {
				$error = 1;
				echo "error f pe";
			} else
				if ($line[0] == '$') {
					$termino['fuente_peru'] = '';
				} else
					$termino['fuente_peru'] = $line;

			//AMBITO(S)

			$line = fgets($inp);

			if ($line[0] == '$' || empty ($line)) {
				$error = 2;
				echo "error Amb";
			} else {

				$ambitos = explode(',', $line);
				$termino['ambito'] = $ambitos;
				//print "$line<br>";			
			}

			//$termino['identificador']=$termino['nombre']."-".implode('-', $ambitos);

			$dump = fgets($inp); //valida linea final
			if (!feof($inp)) {
				if (empty ($dump)) {
					$error = 1;
					echo "linea final fuera";
				}
			}
			//var_dump($termino);
			if ($error != 1 && $error != 2) {
				$TERMINOS[] = $termino;

			}

		}

		//var_dump($TERMINOS);
		if ($error == 1) {
			return false;
		} else {
			foreach ($TERMINOS as $term) {
				$form = $this->formatearDatosLotes($term, $confAmbito);
				$save = new Diccionario($form);
				$test = $save->listarRegistro();
				if (!count($test)) //guardar los que no esten en el xml
					{
					$save->salvar();
				}
			}
			return true;
		}

		fclose($inp);

		//		$base->documentElement->appendChild($dic);
		//		echo $base->saveXML("datos/diccionario2.xml");

	}

}

?>